const Koa = require('koa')
const getIpv4 = require('./utils/index')

const app = new Koa()

// 所有的请求都会进入到这个函数中处理
app.use(async (ctx, next) => {
    console.log('hello Koa - 1')
    await next()
    console.log('hello Koa - 2')
})

app.use(async (ctx, next) => {
    console.log('hello Koa - 3')
    await next()
    console.log('hello Koa - 5')
})

app.use(async (ctx, next) => {
    console.log('hello Koa - 4')
})

app.listen(3000, () => {
    console.log(`my server is running at http://${getIpv4()}:3000`)
})



// 1. 中间件中如果不调用next() 函数 ， 执行权不会向下传递
// 2. 中间件的执行很像一个洋葱，但不会一层一层执行

// ==> 中间件被next() 方法分割为两个部分
//    next() 上面的部分会先执行，下面的部分会在后续中间件执行全部结束之后再执行